# -*- coding: utf-8 -*-
"""
Created on Sat Aug 26 21:19:18 2023

@author: skunk69
"""

import json

chinese_name = u'护士用住院患者护理观察量表'
english_name = "Nurses' Observation Scale for Inpatient Evaluation"
abbreviation = 'NOSIE'
category = u'精神病学临床量表'

outline = u"""护士用住院患者护理观察量表(Nurses' Observation Scale for Inpatient Evaluation, NOSIE)，是一种高度敏感的住院患者行为评级量表。由Honigfeld G.等于1965年编制，能对住院精神病患者行为障碍、病情的演变及治疗效果进行客观评定和分析，为临床治疗、护理及精神药理学研究提供科学依据。本量表有30项和80项两种版本，这里指NOSIE-30。"""

instruction = u"""本量表为频度量表，按照症状的出现频度和具体现象分为5级：（0）无，（1）有时，（2）较常发生，（3）经常发生，（4）几乎总是如此。"""

with open('NOSIE.txt','r',encoding='utf-8') as f:
    lines = f.readlines()
    f.close()

items = {}
rating = {}
for num,line in enumerate(lines[::6]):
    key,value = line.strip().split('、',maxsplit=1)
    items[key] = value.strip()
    lines_rate = lines[num*6+1:(num+1)*6]
    rate = {}
    for line in lines_rate:
        k,v = line.strip().split('\t')
        rate[k[0]] = v.strip()        
    rating[key] = rate

reverse_items = []
scales = [u'社会能力',u'社会兴趣',u'个人整洁',u'激惹',u'精神病表现',u'迟缓',u'抑郁']
scales_items = [
    [13,14,21,24,25],# 社会能力
    [4,9,15,17,19],# 社会兴趣
    [8,30,1,16],# 个人整洁
    [2,6,10,11,12,29],# 激惹
    [7,20],# 精神病表现
    [5,22,27],# 迟缓
    [3,18,23],# 抑郁    
    ]

# check scales_items
print(f'scale length={[len(l) for l in scales_items]}')

check = []
for l in scales_items:
    check = check+l
print(f'len(check)={len(check)}')

# complementary set
check_set = {i for i in sorted(check)}^{i for i in range(1,31)}
print(f'complementary set= {check_set}')

factors = [u'总积极因素',u'总消极因素']
factors_scales = [scales[0:3],scales[3::]]
score_rules = list(range(5))

contents = {
    'instruction':instruction,
    'items':items,
    'reverse_items':reverse_items,
    'scales':scales,
    'scales_items':scales_items,
    'factors':factors,
    'factors_scales':factors_scales,
    'rating':rating,
    'score_rules':score_rules       
    }

implementation = u"""（1）评定者应由通过NOSIE量表评定培训的责任护士担任。
（2）护土应通过观察与交谈等方法，根据患者症状的频度与强度进行评定。
（3）根据患者近3天（或1周）的情况，对30种制定行为进行评分。
（4）如有两名评定员分别进行评分，需将评分相加，得到条目最终评分；如仅有一名评定者，应将评分×2，得到条目最终评分。"""

reliability = u""""""
validity = u""""""
measurements = {'reliability':reliability,'validity':validity}

interpretation = u"""NOSIE结果稍加修正，可得到因子分、总积极因素分、总消极因素分和病情总估计（总分）。总分越低，病情越重。
常数项主要是为避免负分的出现。如有两名评定员分别进行评分，需将评分相加，得到最终评分；如仅有一名评定者，应将评分×2，得到最终评分。下面以一名评定者评分为例，进行结果分析，计算方法如下。
1、因子分：
（1）社会能力[20-（13、14、21、24、25项组分和）]×2
（2）社会兴趣（4、9、15、17、19项组分和）×2
（3）个人整洁[8+（8、30项组分和）-(1、16项组分和)]×2
（4）激惹(2、6、10、11、12、29项组分和)×2
（5）精神病表现（7、20项目分之和）×2
（6）迟缓（5、22、27项组分和）×2
（7）抑郁（3、18、23项组分和）×2
2、总积极因素分：（1）、（2）、（3）项因子分之和
3、总消极因素分：（4）、（5）、（6）、（7）项因子分之和
4、病情总估计：（128+总积极因素-总消极因素)。"""

applications = u"""1、目前国内已经将NOSIE量表应用于精神分裂症、焦虑、抑郁、阿尔茨海默病、进食障碍等多病种，少儿、成人、老年各年龄段人群中。
2、NOSIE量表已用于包括压疮、冲动行为、药物依从性等多方面的联合评估，以提高护理评估准确率，提供预见性护理。
3、NOSIE量表用于护理干预、健康教育、阅读疗法、工娱疗法、始动性功能训练、开放病房等应用效果观察。"""

this_scale = {
    'chinese_name':chinese_name,
    'english_name':english_name,
    'abbreviation':abbreviation,
    'category':category,
    'outline':outline,
    'contents':contents,
    'implementation':implementation,
    'measurements':measurements,
    'interpretation':interpretation,
    'applications':applications    
    }

with open(abbreviation+'.json','w+',encoding='utf-8') as f:
    json.dump(this_scale,f,indent=2,ensure_ascii=False)